کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

استفاده از دستورات SQL در یک برنامه ثبت نام دانشجویی

شرح مختصر پروژه

در این مقاله آموزشی قصد داریم یک برنامه ساده ثبت نام دانشجویی بنویسیم که سه عمل اصلی Insert، Update و Delete را انجام می دهد.

توضیحات پروژه

 

 

کلیه حقوق مادی و معنوی این مقاله متعلق به آموزشگاه تحلیل داده می باشد و هر گونه استفاده غیر قانونی از آن پیگرد قانونی دارد.

سلام. با یکی دیگر از آموزش های C# در خدمت شما هستیم. در این مقاله آموزشی قصد داریم یک برنامه ساده ثبت نام دانشجویی بنویسیم که سه عمل اصلی Insert، Update و Delete را انجام می دهد.

نیازمندی ها

برای ساخت این پروژه کوچک، به نرم افزارهای زیر احتیاج خواهیم داشت:

·        SQL Server 2014

·        Visual Studio 2013

ساخت پایگاه داده

قبل از شروع به کد نویسی لازم است یک پایگاه داده به نام SCHOOL، ایجاد کنیم و فقط یک جدول به شکل زیر در آن اضافه کنیم:

پروژه C#

می توانید از کد زیر برای ساخت این جدول استفاده کنید:

CREATE TABLE [dbo].[Students](

      [StudentId] [smallint] IDENTITY(1,1) NOT NULL,

      [Name] [nvarchar](50) NULL,

      [Contacts] [nvarchar](50) NULL,

 CONSTRAINT [PK_Students] PRIMARY KEY CLUSTERED

(

      [StudentId] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

ساخت فرم اصلی

برای ساخت پروژه Visual Studio را باز کنید و به مسیر زیر بروید:

پروژه C#

در پنجره ای که باز می شود، مطمئن شوید در مسیر زیر قرار دارید:

Template>Visual C#>Windows

سپس Windows Forms Application را انتخاب کرده و یک نام برای پروژه خود وارد کنید:

پروژه C#

فایل ها و فرم های ایجاد شده به شکل زیر خواهند بود:

پروژه C#

خواص زیر را برای Form1 تنظیم کنید:

Yes

RightToLeft

Width:827, Height:415

Size

CenterScreen

StartPosition

فرم ثبت نام دانشجویان

Text

 

یک ToolStrip به فرم اضافه کنید. سپس با کلیک بر روی مثلث کوچکی که کنار کنترل قرار دارد، یک دکمه (Button) به آن اضافه کنید:

پروژه C#

خواص زیر را برای دکمه اضافه شده تنظیم کنید:

btnAddNew

Name

ImageAndText

DisplayStyle

Tahoma, 9.75pt

Font

TopCenter

ImageAlign

None

ImageScaling

اضافه کردن

Text

BottomCenter

ImageAlign

ImageAboveText

TextImageRelation

انتخاب تصویر مناسب

Image

به همین ترتیب دو دکمه دیگر با نام های btnEdit و btnDelete بر روی ToolStrip قرار می دهیم:

پروژه C#

حالا یک TabControl به نام tbGrvPage، برای نمایش اطلاعات تمام دانشجویان، به فرم اضافه کنید. در خاصیت TabPages آن آیتم های از قبل موجود را حذف کنید و یک Page جدید با نام دلخواه اضافه کنید.

نمایش اطلاعات دانشجویان

 می خواهیم تمام اطلاعات دانشجویان را در یک DataGridView نمایش دهیم. به همین منظور یک DataGridView در tbGrvPage قرار می دهیم و نام آن را به grvStudent تغییر میدهیم.

پروژه C#

وارد قسمت کد نویسی فرم می شویم. به منظور کار با پایگاه داده و استفاده از کلاس های مورد نیاز، دو دستور زیر را در بالای صفحه import می کنیم:

using System.Data.SqlClient;

using System.Data;

برای برقراری ارتباط و واکشی اطلاعات جدول، متغییرهای زیر را در سطح کلاس تعریف می کنیم:

string connectionString = @"Data Source=TahlilDadehPC;Initial Catalog=SCHOOL;UID=sa;pwd=123";

SqlConnection cnn = null;

SqlCommand cmd = null;

SqlDataAdapter da = null;

DataTable dt = null;

حالا یک متد تعریف می کنیم که اطلاعات را در gridView قرار دهد:

public void DataLoad()

{

 

   try

   {

       cnn = new SqlConnection(connectionString);

       cmd = new SqlCommand("SELECT * FROM Students", cnn);

       dt = new DataTable("Student");

       da = new SqlDataAdapter(cmd);

       da.Fill(dt);

 

       cnn.Open();

   }

   catch (Exception exp)

   {

 

       MessageBox.Show(exp.Message, "مشکل در برقراری ارتباط با پایگاه داده", MessageBoxButtons.OK, MessageBoxIcon.Error);

   }

   finally

   {

       cnn.Close();

 

       try

       {

           this.grvStudent.DataSource = dt;

       }

       catch (Exception exp)

       {

 

           MessageBox.Show(exp.Message);

       }

 

   }

}

باید این متد را در رویداد Form_Load فراخوانی می کنیم:

private void Form1_Load(object sender, EventArgs e)

{

   DataLoad();

}

نمایش اطلاعات یک دانشجو

حال قصد داریم کاربر با کلیک بر روی هر از سطرهای grvStudent، اطلاعات آن سطر یا همان دانشجو را در یک جدول نمایش دهد. پس یک ک TabControl به نام tbStudentInfo، برای نمایش اطلاعات هر دانشجو اضافه کنید.

برای نمایش اطلاعات هر یک از دانشجویان به جدول نیاز خواهیم داشت. یک TableLayoutPanel در tbStudentInfo قرار دهید و خواص زیر را برای آن تنظیم کنید:

tblStudent

Name

Inset

CellBorderStyle

2

ColumnCount

Fill

Dock

3

RowCount

در هر یک از سلول های این جدول یک Label قرار می دهیم. سه نام مناسب برای سه برچسب سمت چپ انتخاب می کنیم. قرار است مقادیر واکشی شده از جدول در این فیلدها قرار بگیرند.

پروژه C#

همانطور که قبلاً گفته شد، می خواهیم اگر کاربر بر روی هر یک از سلول های جدول کلیک کرد، اطلاعات سطر مربوطه در برچسب های مشخص شده قرار داده شوند. پس یک متد تعریف می کنیم که این کار را برای ما انجام دهد:

public void LoadCurrentStudent()

{

   this.lblStudentID.Text = this.grvStudent.CurrentRow.Cells[0].Value.ToString();

   this.lblStudentName.Text = this.grvStudent.CurrentRow.Cells[1].Value.ToString();

   this.lblStudentContact.Text = this.grvStudent.CurrentRow.Cells[2].Value.ToString();

}

 

از آنجا که می خواهیم تا زمانی که بر روی GridView کلیک نشده باشد، این جدول نشان داده نشود، لذا خاصیت Visible آن را از قبل Flase می کنیم و با اجرای این متد (یعنی زمانی که بر روی سطور GridView کلیک شود) این خاصیت به True تغییر می کند و جدول اطلاعات فردی نمایش داده می شود:

this.tblStudent.Visible = true;

این تابع باید در رخداد CellClick مربوط به GridView فراخوانی شود:

private void grvStudent_CellClick(object sender, DataGridViewCellEventArgs e)

{

   LoadCurrentStudent();

}

اما با اجرای برنامه متوجه خواهید شد که همیشه اولین سطر انتخاب شده است. برای خارج کردن سطور GridView از حال انتخاب دستور زیر را در رخداد DataBindingComplete اضافه می کنیم:

private void grvStudent_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)

{

   ((DataGridView)sender).ClearSelection();

}

اضافه کردن

برای نوشتن دستورات Insert به یک فرم دیگر نیاز خواهیم داشت. برای ایجاد فرم جدید در پنجره SolutionExplorer، بر روی نام پروژه راست کلیک کرده و به مسیر زیر بروید:

پروژه C#

در پنجره باز شده نام فرم جدید را وارد کنید:

پروژه C#

از این فرم برای وارد کردن اطلاعات دانشجو استفاده می شود. فرم جدید را به شکل زیر تغییر دهید:

پروژه C#

نام سه TextBox به ترتیب txtStudentId، txtStudentName و txtStudentContact است. از آنجا که شناسه دانشجو به صورت خودکار تولید می شود، لذا خاصیت ReadOnly آن True است و نمی توان داده ای در آن وارد کرد.

خاصیت DialogResult را برای دکمه ذخیره برابر با OK و برای دکمه انصراف برابر با Cancel قرار می دهیم.

برای پاک کردن فیلدهای این فرم یک متد به شکل زیر تعریف می کنیم:

public void Clear()

{

   this.txtStudentName.Clear();

   this.txtStudentContact.Clear();

 

}

سپس این متد را در رخداد کلیک دکمه پاک کردن فراخوانی می کنیم:

private void btnClear_Click(object sender, EventArgs e)

{

   Clear();

}

برای فراخوانی فرم جدید، باید یک نمونه از آن بسازیم. پس در سطح کلاس، متغییر زیر را تعریف می کنیم:

frmAddNewStudent addNewStudent = null;

در فرم اصلی برای اضافه کردن یک رکورد جدید، متد زیر را اضافه می کنیم:

public void AddNewStudent()

{

   addNewStudent = new frmAddNewStudent();

   addNewStudent.lblStatus.Text = "ورود اطلاعات جدید";

   if (addNewStudent.ShowDialog() == DialogResult.OK)

   {

       //Agar Karbar tamame fild hara por kardeh bashad...

       if (addNewStudent.txtStudentName.Text.Length >0 &&addNewStudent.txtStudentContact.Text.Length >0)

       {

           try

          {

               cnn = new SqlConnection(connectionString);

               cmd = new SqlCommand("INSERT INTO Students ([Name],[Contacts]) VALUES ('" + addNewStudent.txtStudentName.Text + "','" + addNewStudent.txtStudentContact.Text + "')", cnn);

              cnn.Open();

               cmd.ExecuteNonQuery();

               DataLoad();

           }

           catch (Exception exp)

           {

 

               MessageBox.Show(exp.Message, "مشکل در برقراری ارتباط با پایگاه داده", MessageBoxButtons.OK, MessageBoxIcon.Error);

 

           }

           finally

           {

               cnn.Close();

           }

       }

   }

 

}

حالا باید این متد را در رخداد دکمه "اضافه کردن"، فراخوانی کنیم:

private void btnAddNew_Click(object sender, EventArgs e)

{

   AddNewStudent();

}

با اجرای برنامه متوجه خواهید شد که با باز شدن فرم جدید، دیگر به فرم فراخواننده دسترسی ندارید. دلیل این امر استفاده از متد addNewStudent.ShowDialog() است. در شرط چک کرده ایم که اگر در فرم باز شده، کاربر بر روی دکمه ذخیره کلیک کرده باشد، حاصل اجرای تابع addNewStudent.ShowDialog()،DialogResult.OK خواهد بود.

if (addNewStudent.ShowDialog() == DialogResult.OK)

پس از آن بررسی می شود که آیا تمام فیلدها در فرم جدید حاوی مقداری هستند یا خیر.

if (addNewStudent.txtStudentName.Text.Length >0 &&addNewStudent.txtStudentContact.Text.Length >0)

 در صورت پر بودن تمام فیلدهای فرم جدید، ارتباط با پایگاه داده برقرار می شود و دستور Insert مناسب ساخته و اجرا می شود.

cnn = new SqlConnection(connectionString);

               cmd = new SqlCommand("INSERT INTO Students ([Name],[Contacts]) VALUES ('" + addNewStudent.txtStudentName.Text + "','" + addNewStudent.txtStudentContact.Text + "')", cnn);

              cnn.Open();

               cmd.ExecuteNonQuery();

و پس از اجرای موفقیت آمیز دستور Insert، مجدداً تابع DataLoad() اجرا می شود تا رکوردی را که اخیراً اضافه کرده ایم، در GridView مشاهده کنیم.

علاوه بر این می توانیم یک دکمه دیگر نیز بر روی فرم قرار دهیم و در رویداد کلیک آن دستورات زیر را اضافه کنیم:

private void btnAddAside_Click(object sender, EventArgs e)

{

   btnAddNew.PerformClick();

}

این دستور معادل کلیک کردن بر روی دکمه "اضافه کردن" در ToolStrip است.

ویرایش

برای این قسمت می خواهیم اگر کاربر بر روی یکس از سلول های GridView کلیک کرد، خاصیت Visible در جدول tblStudent برابر با True شود و سطر مربوطه در آن قرار داده شود. به همین منظور یک متغییر سراسری منطقی و در سطح کلاس به شکل زیر تعریف می کنیم:

bool DATA_GRID_VIEW_IS_CLICKED = false;

از این متغییر برای بررسی اجرا شدن رخداد کلیک بر روی سلول های GridView استفاده می شود. لذا مقدار پیش فرض آن False است. یعنی هنوز هیچ کلیکی بر روی GridView انجام نشده است. پس مقدار آن را در رخداد CellClick مربوط به GridView، True می کنیم:

private void grvStudent_CellClick(object sender, DataGridViewCellEventArgs e)

{

   DATA_GRID_VIEW_IS_CLICKED = true;

   LoadCurrentStudent();

}

تابع LoadCurrentStudent() داده سطر جاری را در جدول قرار می دهد:

public void LoadCurrentStudent()

{

   this.tblStudent.Visible = true;

 

   this.lblStudentID.Text = this.grvStudent.CurrentRow.Cells[0].Value.ToString();

   this.lblStudentName.Text = this.grvStudent.CurrentRow.Cells[1].Value.ToString();

   this.lblStudentContact.Text = this.grvStudent.CurrentRow.Cells[2].Value.ToString();

}

با کلیک بر روی GridView و نیز مقدار دهی فیلدهای جدول  tblStudent، بنابراین خاصیت Visible جدول به True تغییر می کند.

با کلیک بر روی دکمه "ویرایش همان فرم frmAddNewStudent باز می شود. اما این بار تمام فیلدها قبل از نمایش باید با سطر انتخابی ما مقدار دهی شده باشد. به همین منظور تابع زیر را در فرم اول اضافه می کنیم:

public void EditStudent()

{

if (DATA_GRID_VIEW_IS_CLICKED)

{

   DATA_GRID_VIEW_IS_CLICKED = false;

 

   addNewStudent = new frmAddNewStudent();

   addNewStudent.lblStatus.Text = "ویرایش اطلاعات ";

   addNewStudent.txtStudentName.Text = this.lblStudentName.Text;

   addNewStudent.txtStudentContact.Text = this.lblStudentContact.Text;

   addNewStudent.txtStudentId.Text = this.lblStudentID.Text;

 

   if (addNewStudent.ShowDialog() == DialogResult.OK)

   {

 

 

       if (addNewStudent.txtStudentName.Text.Length >0 &&addNewStudent.txtStudentContact.Text.Length >0)

       {

           try

           {

               cnn = new SqlConnection(connectionString);

               cmd = new SqlCommand("UPDATE [Students] SET [Name] = '" + addNewStudent.txtStudentName.Text + "',[Contacts] = '" + addNewStudent.txtStudentContact.Text + "' WHERE StudentId=" + this.grvStudent.CurrentRow.Cells[0].Value.ToString() + "", cnn);

               cnn.Open();

               cmd.ExecuteNonQuery();

           }

           catch (Exception exp)

           {

               MessageBox.Show(exp.Message, "مشکل در برقراری ارتباط با پایگاه داده", MessageBoxButtons.OK, MessageBoxIcon.Error);

           }

          finally

           {

               cnn.Close();

               this.tblStudent.Visible = false;

               DataLoad();

 

           }

       }

   }

}

}

در این متد ابتدا چک میکند که آیا بر روی GridView کلیک شده است یا خیر.

if (DATA_GRID_VIEW_IS_CLICKED)

 از آنجا که در رویداد CellClick مربوط به GridView مقدار DATA_GRID_VIEW_IS_CLICKED را True کرده ایم، پس دستورات داخل بلوک if اجرا می شود و در اولین مرحله مقدار DATA_GRID_VIEW_IS_CLICKED را False میکند. سپس یک نمونه از فرم مورد نظر ساخته و تمام فیلدهای آن را مقدار دهی می کند.

نکته: برای اینکه به کنترل های یک فرم از یک فرم دیگر دسترسی داشته باشیم، باید خاصیت AccessModifier آن کنترل ها را بر روی Public تنظیم کنیم.

addNewStudent = new frmAddNewStudent();

addNewStudent.lblStatus.Text = "ویرایش اطلاعات ";

addNewStudent.txtStudentName.Text = this.lblStudentName.Text;

addNewStudent.txtStudentContact.Text = this.lblStudentContact.Text;

addNewStudent.txtStudentId.Text = this.lblStudentID.Text;

مانند متد اضافه کردن، مجدداً این فرم با متد ShowDialog باز می شود و پس از بررسی مقادیر فیلدها، دستور Update مناسب ساخته و اجرا می شود:

if (addNewStudent.ShowDialog() == DialogResult.OK)

{

 

 

   if (addNewStudent.txtStudentName.Text.Length >0 &&addNewStudent.txtStudentContact.Text.Length >0)

   {

       try

       {

           cnn = new SqlConnection(connectionString);

           cmd = new SqlCommand("UPDATE [Students] SET [Name] = '" + addNewStudent.txtStudentName.Text + "',[Contacts] = '" + addNewStudent.txtStudentContact.Text + "' WHERE StudentId=" + this.grvStudent.CurrentRow.Cells[0].Value.ToString() + "", cnn);

           cnn.Open();

           cmd.ExecuteNonQuery();

       }

سپس در قسمت Finaly، بعد از بسته شدن فرم جدید، خاصیت Visible مربوط به جدول را False کرده و مجدداً اطلاعات را در GridView بارگذاری می کند:

finally

{

   cnn.Close();

   this.tblStudent.Visible = false;

   DataLoad();

 

}

حال باید این متد را در رخداد Click مربوط به دکمه "ویرایش" فراخوانی کنیم:

private void btnEdit_Click(object sender, EventArgs e)

{

   EditStudent();

}

حذف

برای "حذف" نیز مانند "ویرایش" باید اول روی GridView کلیک شود تا اطلاعات در جدول نشان داده شود، بعد دستور Delete مناسب ساخته شده و عملیات حذف انجام شود:

public void DeleteStudent()

{

   //Agar Stri Entekhab Shodeh Bashad....

   if (DATA_GRID_VIEW_IS_CLICKED)

   {

       DATA_GRID_VIEW_IS_CLICKED = false;

       try

       {

           cnn = new SqlConnection(connectionString);

           cmd = new SqlCommand("DELETE FROM [Students] WHERE StudentId=" + this.grvStudent.CurrentRow.Cells[0].Value.ToString(), cnn);

           cnn.Open();

           cmd.ExecuteNonQuery();

 

 

       }

       catch (Exception exp)

       {

           MessageBox.Show(exp.Message, "مشکل در برقراری ارتباط با پایگاه داده", MessageBoxButtons.OK, MessageBoxIcon.Error);

 

       }

       finally

       {

           this.tblStudent.Visible = false;

           cnn.Close();

           DataLoad();

       }

   }

}

سپس در قسمت Finaly، بعد از بسته شدن فرم جدید، خاصیت Visible مربوط به جدول را False کرده و مجدداً اطلاعات را در GridView بارگذاری می کند:

finally

{

   cnn.Close();

   this.tblStudent.Visible = false;

   DataLoad();

 

}

این تابع را در رخداد کلیک دکمه "حذف" فراخوانی می کنیم:

private void btnDelete_Click(object sender, EventArgs e)

{

   DeleteStudent();

}

فرم نهایی به شکل زیر خواهد بود:

پروژه C#

سخن آخر

امیدوار هستیم از این آموزش لذت برده باشید و بتوانید به راحتی از آن استفاده کنید. البته فایل پروژه نیز از سایت، قابل دانلود می باشد.

 

 

1394/10/15 14155 2356
رمز عبور : tahlildadeh.com یا www.tahlildade.com
نظرات شما

نظرات خود را ثبت کنید...